package vue.onglets;
import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import javax.swing.*;

import modele.*;
import vue.panneau1.Zone1;
import vue.panneau2.Zone2;
import vue.panneau2.controle.NouveauResultatPointListener;
import vue.panneau3.PopupChoixFonctionAOptimiser2D;
import vue.panneau3.Zone3;
import vue.panneau3.panneau3Controleur.EtapePrecedenteSuivanteListener;
import vue.util.Point;

public class Onglet extends JPanel implements NouveauResultatPointListener,EtapePrecedenteSuivanteListener
{
	private static final long serialVersionUID = 1L;
	private File fichier;
	private Zone1 z1;
	private Zone2 z2;
	private Zone3 z3;
	private JSplitPane jspH,jspV;
	private boolean is3D;
	
	public Onglet(File fichier,boolean is3D)
	{	
		this.fichier = fichier;
		this.affiche(is3D);
	}
	
	public Onglet(boolean is3D)
	{	
		this.affiche(is3D);
	}
	
	public void affiche(boolean is3D)
	{
		this.is3D = is3D;
		
		z2 = new Zone2();
		try 
		{
			z3 = new Zone3(is3D);
		}
		catch (Exception e) 
		{
			z3 = new Zone3(!is3D);
		}
		z1 = new Zone1(z2,z3,is3D);
		
		z2.addNouveauResultatPointListener(this);
		z3.getModele().addEtatPrecedantSuivantListener(this);
		
		jspH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,z1,z2);	
		jspH.setOneTouchExpandable(true);
		jspH.setDividerSize(10);
		
		jspV = new JSplitPane(JSplitPane.VERTICAL_SPLIT,!is3D,jspH,z3);
		jspV.setOneTouchExpandable(true);
		jspV.setDividerSize(10);
		
		this.setLayout(new BorderLayout()); 
		this.add(jspV,BorderLayout.CENTER);		
	}
	
	public File getFichier()
	{
		return fichier;
	}
	
	public void setFichier(File fichier)
	{
		this.fichier = fichier;
	}
	
	public Zone1 getZone1()
	{
		return z1;
	}
	
	public Zone2 getZone2()
	{
		return z2;
	}
	
	public Zone3 getZone3()
	{
		return z3;
	}
	
	public void charger2D(Vector<Equation2D> listeEquations,FonctionAOptimiser2D fct2D)
	{
		z1.getInterface2DZone1().charger2D(listeEquations,fct2D);
	}

	public void charger3D(Vector<Equation3D> listeEquations,FonctionAOptimiser3D fct3D)
	{
		z1.getInterface3DZone1().charger3D(listeEquations,fct3D);	
	}
	
	public File enregistrer(File nomfic)
	{
		File fic = nomfic;
		
		if (!nomfic.getName().endsWith(".spx"))
		{
			fic = new File(nomfic.getPath() + ".spx");
		}
		
		if(nomfic.exists()) 
		{
			nomfic.delete();
		}
		
		try
		{
			fic.createNewFile();
		}
		catch(IOException e) 
		{
			e.printStackTrace();
		}
		
		// enregistrement du systeme de simplexe 2D ou 3D  
		if(is3D)
		{
			z1.getInterface3DZone1().enregistrer3D(fic);
		}
		else
		{
			z1.getInterface2DZone1().enregistrer2D(fic);
		}
		return fic;
	}
	
	public void changerResultatPoint(float x1,float x2,int numeroMatrice,String libelle) 
	{	
		z3.getModele().setPoint2DUnique(new Point(x1,x2,numeroMatrice,libelle));
	}
	
	public void selectionnerEtapePrecedente()
	{
		z2.getModele().selectionnerEtapePrecedente();		
	}

	public void selectionnerEtapeSuivante() 
	{
		z2.getModele().selectionnerEtapeSuivante();
	}

	public void changerLaFonctionAOptimiser() 
	{
		new PopupChoixFonctionAOptimiser2D(z1.getInterface2DZone1());
	}

	public void relancerLeCalcul() 
	{
		z2.getModele().lancerResolution();
	}
}
